/* 작성자 : Jint
 * 작성일 : 140419
 * 내용 : 검색 금지어를 배열에 저장하고,
 * 검색시 contains 를 사용하여 검색 내용중 금지어가 있으면 검색이 되지 못하게 한다.
 * 
 * 추가로 필요한 작업 : 중복 검사
 */
package SecondSaturday;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Arrays;

public class wordFind extends JFrame {

	private JPanel contentPane;
	private JLabel lblNewLabel;
	private JLabel label;
	private JTextField addWord;
	private JTextField wordSearch;
	private JButton btnAdd;
	private JButton btnSearch;
	private JScrollPane scrollPane;
	private JTextArea result;
	private JLabel label_1;
	
	static String[] ban = new String[100]; //금지어 저장 배열
	static int i=0;
	static int count=0;// 금지어 저장시 ++;
	
	
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					wordFind frame = new wordFind();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public wordFind() {
		setTitle("Word Search");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 600, 400);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		contentPane.add(getLblNewLabel());
		contentPane.add(getLabel());
		contentPane.add(getAddWord());
		contentPane.add(getWordSearch());
		contentPane.add(getBtnAdd());
		contentPane.add(getBtnSearch());
		contentPane.add(getScrollPane());
		contentPane.add(getLabel_1());
	}
	private JLabel getLblNewLabel() {
		if (lblNewLabel == null) {
			lblNewLabel = new JLabel("금지어");
			lblNewLabel.setFont(new Font("굴림", Font.PLAIN, 15));
			lblNewLabel.setBounds(12, 10, 57, 15);
		}
		return lblNewLabel;
	}
	private JLabel getLabel() {
		if (label == null) {
			label = new JLabel("검색어");
			label.setFont(new Font("굴림", Font.PLAIN, 15));
			label.setBounds(12, 35, 57, 15);
		}
		return label;
	}
	private JTextField getAddWord() {
		if (addWord == null) { // addWord 가 한번도 실행되지 않았다면,
			addWord = new JTextField(); // JTextField() 타입,메서드를 이용해서 addWord를 만들고(새로 선언하고)
			addWord.setBounds(81, 7, 368, 21); // 81,7 위치에 넓이 368, 높이 21로 만들고
			addWord.setColumns(10);			// 입력될수있는 가시적인 수량은 10개로 해라.
		}
		return addWord; // 그리고 addWord를 반환해라.
	}
	private JTextField getWordSearch() {
		if (wordSearch == null) {
			wordSearch = new JTextField();
			wordSearch.setColumns(10);
			wordSearch.setBounds(81, 32, 368, 21);
		}
		return wordSearch;
	}
	private JButton getBtnAdd() {
		if (btnAdd == null) {
			btnAdd = new JButton("추가");
			btnAdd.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {	
					wordAdd_teacher();
					//wordAdd_my();
				}
			});
			btnAdd.setBounds(461, 6, 97, 23);
		}
		return btnAdd;
	}
	private JButton getBtnSearch() {
		if (btnSearch == null) {
			btnSearch = new JButton("검색");
			btnSearch.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {					
					find_teacher();		
					//find_My();
				}
			});
			btnSearch.setBounds(461, 31, 97, 23);
		}
		return btnSearch;
	}
	private JScrollPane getScrollPane() {
		if (scrollPane == null) {
			scrollPane = new JScrollPane();
			scrollPane.setBounds(12, 89, 542, 263);
			scrollPane.setViewportView(getResult());
		}
		return scrollPane;
	}
	private JTextArea getResult() {
		if (result == null) {
			result = new JTextArea();
		}
		return result;
	}
	private JLabel getLabel_1() {
		if (label_1 == null) {
			label_1 = new JLabel("검색결과");
			label_1.setFont(new Font("굴림", Font.PLAIN, 15));
			label_1.setBounds(12, 64, 57, 15);
		}
		return label_1;
	}
	
	public void find_teacher(){
		boolean flag = false;  // 금지어가 포함되어 있지 않은 경우.
		
		String str = wordSearch.getText();
		String w = "";
		int cnt=0; //포함된 금지어의 갯수;
		if(str.equals("")) return;
		for(int i=0;i<count;i++){ // 길이 제한을 배열의 길이(ban.length()) 로 나타낼 수도 있지만 count 를 사용하면 저장된 값만 비교하므로 프로세스가 빨라진다.
			if(str.contains(ban[i])){
				flag=true;
				cnt++;
				w += ban[i] + " ";
			}
		}
		if(flag){
			result.append("금지어가 포함되어 있습니다.\n 포함된 금지어 갯수 : " + cnt + "\n포함 된 금지어 : " + w);
		}else{
			result.append("금지어가 포함되어 있지 않습니다.\n");
		}	
	}
	public void find_My(){
		boolean flag=true;
		
		for(int k=0;k<i;k++){
			if(wordSearch.getText().contains(ban[k])){
				flag=false;
				result.append("\n입력하신 단어 '"+wordSearch.getText()+"'속에 금지어가 포함되어 있습니다.\n");
				result.append("==========현재까지 등록된 금지어 목록==========\n");
				for(int j=0;j<i;j++){
					result.append(ban[j]+" ");								
				}							
				result.append("\n");							
				break;
			}
		}
		if(flag){
			result.append("검색되었습니다.\n");
		}
		
		
	}
	public void wordAdd_teacher(){
		// addWord.getText() == null 이라고 하면 
		// addWord.getText() == "" 으로하면 확률이 반반,
		
		if(addWord.getText().equals("")){
			result.append("공백은 추가가 되지 않습니다.\n");
			return;
		}
		String[] temp = addWord.getText().split(" "); // 검색어 추가시 공백을 기준으로 나눠서 저장한다.
		for(int i=0;i<temp.length ; i++){
			ban[count] = temp[i];
			count++;
			if(count>99){
				for(int j=0;j<99;j++){
					ban[j]=ban[j+1];
				}
				count=99;
			}
		}
		result.append("금지어가 추가되었습니다.\n");
		result.append("추가된 금지어 : " + Arrays.toString(temp) + "\n");
		result.append("현재까지 추가된 금지어 : " + Arrays.toString(ban) + "\n");
		result.setCaretPosition(result.getText().length());
	}
	public void wordAdd_my(){
		ban[i] = addWord.getText();					
		result.append("현재까지 등록된 금지어 목록\n");					
		for(int j=0;j<=i;j++){
			result.append(ban[j]+" ");
		}
		result.append("\n");
		i++;
	}
	
}
